package com.group11.studentm.view;

import com.group11.studentm.domain.Course;
import com.group11.studentm.domain.Sdept;
import com.group11.studentm.domain.StuSelectScoreT;
import com.group11.studentm.service.TeacherService;
import com.group11.studentm.utils.ValidationUtil;
import org.junit.Test;

import java.util.List;
import java.util.Scanner;

/**
 * @date 2022/12/06/17:20
 * @since 17
 */
public class ViewTeacher {
    Scanner scanner = new Scanner(System.in);
    TeacherService teacherService = new TeacherService();

    public void mainView() {
        while (true) {
            System.out.println("==========教师==========");
            System.out.println("添加学生课程成绩[1]");
            System.out.println("查询本学年学生选课成绩[2]");
            System.out.println("退出登录[0]");
            int option = scanner.nextInt();
            switch (option) {
                case 1: // 添加学生成绩
                    addStudentScore();
                    break;
                case 2: // 查询学生成绩
                    while (queryStudentScore()) ;
                    break;
                case 0: // 退出
                    return;
                default:
                    System.out.println("输入有误，重新输入");
            }
        }
    }

    /**
     * 根据学号添加一个学生成绩
     */
    public boolean addStudentScore() {
        List<Course> cList = teacherService.findCourse();
        System.out.println("---------------------添加学生成绩---------------------");
        System.out.println("待输入：学号 课程 得分");
        System.out.print("学号：");
        String sno = scanner.next();
        System.out.print("选择课程：");
        for (Course c : cList) {
            System.out.print(c.getCname() + " ");
        }
        System.out.print("\n课程：");
        String course = scanner.next();
        System.out.print("得分：");
        String score = scanner.next();


        if ("".equals(sno) || "".equals(score) || "".equals(course)) {
            System.out.println("部分信息为空");
        } else if (!ValidationUtil.checkSno(sno)) {
            System.out.println("请输入正确的学号");
        } else if (!teacherService.checkSno(sno)) {
            System.out.println("不存在该学生");
        } else if (!ValidationUtil.checkCname(course)) {
            System.out.println("请输入正确的课程名");
        } else if (!ValidationUtil.checkGrade(score)) {
            System.out.println("请输入正确的分数0-100");
        } else {
            //判断学号 2005开头是学生,学生才应该有成绩
            StringBuffer buffer = new StringBuffer(sno);
            String s = buffer.substring(0, 4);

            if (!"2005".equals(s)) {
                System.out.println("学号与身份不符");
            } else {
                // 查询数据：根据课程名查询课程id 课程名→id,如果课程不存在返回0
                int cid = teacherService.findCID(course);
                if (cid == 0) {
                    System.out.println("课程不存在");
                } else if ( /*插入数据：学生成绩*/ teacherService.addSc(sno, cid, Integer.parseInt(score))) {
                    System.out.println("添加成功！");
                    return true;
                } else {
                    System.out.println("添加失败！");
                }
            }
        }
        return false;
    }

    /**
     * 老师查询学生成绩
     */
    @Test
    public boolean queryStudentScore() {
        System.out.println("-----------------查询学生成绩-----------------");
        System.out.print("查询所有[1]\t查询细分[2]\t退出查询[0]");
        // 要展示的列表list
        List<StuSelectScoreT> list = null;
        int option = scanner.nextInt();
        switch (option) {
            case 1://所有院系所有课程，全表
                list = teacherService.findAllSc();
                break;
            case 2:
                List<Sdept> deptList = teacherService.findAllSName();
                List<Course> courseList = teacherService.findCourse();
                System.out.println("待输入：学号 院系 课程");
                // 获取学号
                System.out.print("学号[ 空 ]：");
                String sno = scanner.next();
                // 获取院系
                System.out.print("院系[ 空 所有院系 ");
                for (Sdept dept : deptList) {
                    System.out.print(dept.getSdept_name() + " ");
                }
                System.out.print("]：");
                String sdept = scanner.next();
                // 获取课程
                System.out.print("课程[ 空 所有课程 ");
                for (Course course : courseList) {
                    System.out.print(course.getCname()+" ");
                }
                System.out.print("]：");
                String cname = scanner.next();


                //分情况查询
                if ("空".equals(sno)) {
                    //无学号
                    if ("所有院系".equals(sdept) && "所有课程".equals(cname)) {
                        //所有院系所有课程，全表
                        list = teacherService.findAllSc();
                    } else if ("所有院系".equals(sdept) && !"所有课程".equals(cname)) {
                        //所有院系,某一课程
                        list = teacherService.findAllSc1(cname);
                    }
                    if (!"所有院系".equals(sdept) && "所有课程".equals(cname)) {
                        //某一院系的所有课程
                        list = teacherService.findAllSc2(sdept);

                    } else if (!"所有院系".equals(sdept) && !"所有课程".equals(cname)) {
                        //某一院系的某一课程
                        list = teacherService.findAllSc3(sdept, cname);
                    }

                } else {
                    //有学号（校验）
                    if (!ValidationUtil.checkSno(sno)) {
                        System.out.println("请输入正确的学号");
                        return true;
                    } else {
                        //检查是不是2005开头的
                        StringBuffer buffer = new StringBuffer(sno);
                        String s = buffer.substring(0, 4);
                        if (!"2005".equals(s)) {
                            System.out.println("学号与身份不符");
                            return true;
                        } else {
                            if ("所有课程".equals(cname)) {
                                //查询该学生的全部课程
                                list = teacherService.findGrade1(sno);
                            } else { // 不选择所有课程的情况
                                //查询该学生的某一课程
                                list = teacherService.findGrade2(sno, cname);
                            }
                        }
                    }
                }
                break;
            case 0:
                return false; // 停止查询就返回false，然后回到教师界面
            default:
                System.out.println("重新输入");
                return true;
        }

        // 展示
        assert list != null;
        int size = list.size();
        System.out.println("---------------学生成绩信息---------------");
        System.out.println("+---+----------+------+---------+------+");
        System.out.println("|编号|   学号    | 姓名  |  课程名  | 得分 |");
        System.out.println("+---+----------+------+---------+------+");
        if (size > 0) {
            int count = 1;
            for (StuSelectScoreT stu : list) {
                System.out.printf("| %-1d | %-8s | %-4s| %-5s| %-4s |\n", count, stu.getSno(), stu.getSname(), stu.getCname(), stu.getGrade());
                System.out.println("+---+----------+------+---------+------+");
                count++;
            }

        } else {
            System.out.printf("| %-1d |  %-5s | %-4s| %-6s| %-3s |\n", 1, "无记录", "无记录", "无记录", "无记录");
            System.out.println("+---+----------+------+---------+------+");
        }
        return true;
    }

}

